package cc.toprank.syncdatatask.util;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.apache.log4j.Logger;

/**
 * 功能：实现发送邮件 
 * 作者:黄小云 
 * 日期:2017-02-07 
 * 描述：当系统出现异常时，将会发一封邮件到指定的邮件
 */
@SuppressWarnings("deprecation")
public class MailHelper {

	private static Logger logger = Logger.getLogger(MailHelper.class);
	private static MailHelper instance = new MailHelper();

	private MailHelper() {

	}

	public synchronized static MailHelper getInstance() {
		if (instance == null) {
			instance = new MailHelper();
		}

		return instance;
	}

	public void sendMail(String mailTitle, String mailContent) {
		Properties props = new Properties();
		props.setProperty("mail.smtp.auth", "true");// 设置访问smtp服务器需要认证
		props.setProperty("mail.transport.protocol", "smtp"); // 设置访问服务器的协议

		Session session = Session.getDefaultInstance(props);
		session.setDebug(true); // 打开debug功能

		Message msg = new MimeMessage(session);
		try {
			msg.setFrom(new InternetAddress(PropFileHelper.getInstance().getMailConfig("mail.smtp.username")));
			// 设置发件人，163邮箱要求发件人与登录用户必须一致（必填），其它邮箱不了解
			msg.setSubject(mailTitle); // 设置邮件主题
			msg.setText(mailContent); // 设置邮件内容
			Transport trans = session.getTransport();
			trans.connect(PropFileHelper.getInstance().getMailConfig("mail.smtp.host"),
					Integer.valueOf(PropFileHelper.getInstance().getMailConfig("mail.smtp.port")),
					PropFileHelper.getInstance().getMailConfig("mail.smtp.username"),
					PropFileHelper.getInstance().getMailConfig("mail.smtp.password")); // 连接邮箱smtp服务器，25为默认端口
			String toMail = PropFileHelper.getInstance().getMailConfig("mail.to.email");
			String[] aryToMail = toMail.split(",");
			Address[] aryAddress = new Address[aryToMail.length];
			for(int i = 0 ;i < aryToMail.length;i++) {
				aryAddress[i] = new InternetAddress(aryToMail[i]);
			}
			
			trans.sendMessage(msg, aryAddress); // 发送邮件
			trans.close(); // 关闭连接

		} catch (AddressException e) { 
			e.printStackTrace();
			logger.error(e.getMessage()); 
		} catch (MessagingException e) { 
			e.printStackTrace();
			logger.error(e.getMessage());
		}
	}

	public static void main(String[] args) throws MessagingException {

		MailHelper.getInstance().sendMail("test mail", "只要有“淡泊以明志，宁静以致远”的心态，我们就能从容应对一切的挫折与困难。");
		// Properties props = new Properties();
		// props.setProperty("mail.smtp.auth", "true");// 设置访问smtp服务器需要认证
		// props.setProperty("mail.transport.protocol", "smtp"); // 设置访问服务器的协议
		//
		// Session session = Session.getDefaultInstance(props);
		// session.setDebug(true); // 打开debug功能
		//
		// Message msg = new MimeMessage(session);
		// msg.setFrom(new InternetAddress("offline@toprank.cc")); //
		// 设置发件人，163邮箱要求发件人与登录用户必须一致（必填），其它邮箱不了解
		// msg.setText("Hello world!"); // 设置邮件内容
		// msg.setSubject("test"); // 设置邮件主题
		//
		// Transport trans = session.getTransport();
		// trans.connect("smtp.exmail.qq.com", 25, "offline@toprank.cc",
		// "Toprank123"); // 连接邮箱smtp服务器，25为默认端口
		// trans.sendMessage(msg, new Address[] { new
		// InternetAddress("huangxiaoyun@toprank.cc") }); // 发送邮件
		//
		// trans.close(); // 关闭连接
	}
}
